/*
 * @Description: file content
 * @Author: ZeT1an
 * @Date: 2022-01-09 12:21:01
 * @LastEditors: ZeT1an
 * @LastEditTime: 2022-01-09 12:39:46
 * @LastEditContent: 
 */
/**
 * JS中函数作为第一公民的两个特征
 * 1.JS中函数的使用非常灵活
 * 2.在JS中函数既可以作为函数的参数，也可以作为函数的返回值
 */

/**
 * 什么是高阶函数
 * 1.当一个函数，接收另一个函数作为参数，或返回一个函数时，称为高阶函数
 */

/**
 * 函数和方法的区别
 * 	使用对象调用的函数称为方法
 */

/**
 * JS数组中常用的6个高阶函数
 * filter, map, reduce, find, findIndex, forEach
 */

/**
 * 组成闭包的2部分：函数 + 可以访问的自由变量
 */

/**
 * 闭包定义的3点总结：
 * 	1.广义上来说，JS中的每一个函数都是一个闭包
 * 	2.狭义上来说，JS中函数访问到外层作用域变量的情况称为闭包
 * 	3.一个普通的函数，如果它可以访问外层作用域变量，那么这个函数就是一个闭包
 */

/**
 * 什么是闭包的内存泄漏：
 * 	当一个闭包的函数访问的外层作用域变量不再被使用，但无法被释放的情况称为闭包
 */

/**
 * 怎么解决闭包的内存泄漏
 * 	将闭包的函数引用置为null，那么函数对应的熵增作用域AO对象就不可达了，在GC下一次检测中，他们就会被释放。
 */

/**
 * V8引擎的实现中，一个整数占据4个字节
 */

/**
 * ECMA规范中，闭包依赖的词法环境都不会被销毁，V6引擎中删除了没有依赖的变量
 */
